package com.doitedu.day04.funcs

/**
 * @Date 22.6.23
 * @Created by HANGGE
 * @Description
 * 对集合中的元素分组
 * groupBy(函数)    T=>K   根据函数的返回值进行分组 值相同的在一组
 * grouped(3)  大小分组
 */
object _01GroupBy {
  def main(args: Array[String]): Unit = {
    val  ls = List("java" , "hbase" , "java" , "hadoop", "java","hadoop")
      // 1 String=>Boolean  true  false
     // 分组只有两组  true的一组  false 的一组
     val grouped1: Map[Boolean, List[String]] = ls.groupBy(e => e.startsWith("h"))
     //false: java-sql-js
    // true: hbase-hive-hadoop
    val res1 = grouped1.map(tp => {
    /*  val k = tp._1 // true | false
      val str = tp._2.mkString("-")
      s"$k: $str"*/
      s"${tp._1} : ${tp._2.mkString("-")}"
    })
   res1.foreach(println)
    println("--------------------")
    // 2 String=>Int  结果值作为分组依据
    val grouped2 = ls.groupBy(e=>(e.hashCode & Int.MaxValue) %3)
    grouped2.foreach(println)
    println("--------------------")
    // 3  e=>e  按照自己本身的值分组
    ls.groupBy(e=>e).foreach(println)
    // 4
    val  mp  = Map[String,Int]("ab"->1 , "ac"->1 , "b"->2)
    mp.groupBy(_._1.startsWith("a"))
    // 5  根据 数据元素的属性值分组
    //  学生数据  sid,sname,saddr   按照省分组





  }

}
